Тревожные переменные в Пульт.Онлайн — это механизм мониторинга критических событий в SCADA-системе. Они позволяют отслеживать нарушения заданных условий работы оборудования или параметров и оперативно реагировать на них. Тревожные переменные в Пульт.Онлайн предоставляют гибкий инструмент для мониторинга критических событий и оперативного реагирования.
Тревожная переменная — специальный тип переменной, которая отслеживает значения других переменных и изменяет свой статус при выполнении заданных условий. Тревоги создаются в прототипах, а при сборке проекта для каждого узла создается соответствующий набор тревожных переменных.
Классы тревог:
События тревоги:
Тревожные переменные создаются в прототипах на вкладке ALARM:
Основные свойства тревожной переменной:
Сигнал — математическое выражение, в простейшем случае - имя переменной, значение которой отслеживается.
Введите имя отслеживаемой переменной со знаком $ - $var_name
При необходимости, используйте несколько переменных, математические выражения и функции, например:
$temperature > 100 && bit($status,8)==0
Используйте локальные имена переменных для переменных этого прототипа ($temperature), проектные имена для переменных других узлов проекта ($N1_temperature) и глобальные имена для переменных из других проектов, размещенных на сервере ($P1_N1_temperature).
Обратите внимание! Имена переменных необходимо указывать со знаком $
Условие — условие для активации тревоги:
!=0, ==0 - сравнение рассчитанного выражения из поля Сигнал с нулем>, <, >=, <=, ==, != - сравнение рассчитанного выражения из поля Сигнал с выражением в поле Уставка.Отклонение - Сигнал больше или меньше Уставки на величину, заданную в поле ОтклонениеСкорость изменения - ROC (Rate of Change), величины изменения Сигнала за указанный Период больше УставкиУставка — как и в поле Сигнал допускается использование выражений. В простейшем случае - число, с которым будет выполняться сравнение Сигнала по Условию.
Задержка — время (в секундах), в течение которого условие должно сохраняться перед активацией тревоги. Позволяет избежать ложных срабатываний при кратковременных скачках отслеживаемых сигналов. При этом, Задержка не применяется к нормализации тревоги (тревога всегда переходит в состояние Норма без задержки). В качестве значения параметра может использоваться выражение.
Мертвая зона — гистерезис, нормализация тревоги будет происходить только если разница между значением
Сигнала и Уставкой сравняется или превысит по модулю значение мертвой зоны. В качестве значения параметра может использоваться выражение. Например, если условие активации тревоги Сигнал >= 20, при значении Сигнала, равным 20, произойдет активация тревоги. Если при этом задана мертвая зона, равная, например 3, то нормализация тревоги произойдет только при уменьшении значения Сигнала до 17.
Класс — определяет серьезность события:
Квитирование — если параметр включен, тревога будет заведена как квитируемая. Квитируемые тревоги остаются в списке актуальных тревог даже после нормализации, до подтверждения (квитирования) оператором. Неквитируемые тревоги автоматически убираются из списка актуальных тревог после нормализации и не требуют подтверждения.
Описание — краткое понятное название тревоги, которое будет отображаться в интерфейсе:
Рассмотрим создание тревоги для контроля температуры двигателя:
motor_overheat$motor_temperature / 10 (нормализуем значение, если требуется)>$motor_temperature_high_limit (используем переменную для динамического задания порога аварии)3 (секунды)Пульт.Онлайн использует шаблоны для форматирования уведомлений. По умолчанию тревожные переменные используют шаблон default_alarm.ntf. Шаблоны уведомлений редактируются в разделе Редактор / Проект / Уведомления.
Уведомления могут содержать блоки с директивами и подстановками:
#if channel_telegram
#telegram_parse_mode MarkdownV2
**Авария %var__desc%**: %var__alarm_action_name%
#if channel_interface
<b>Авария %var__desc%</b>: %var__alarm_action_name%
Основные подстановки для тревог:
%var__desc% — описание тревоги%var__alarm_action_name% — событие (активация, нормализация и т.д.)%var__node_pseudo_path% — имя узла%var__value% — текущее значение переменной%var__time_str% — время событияУведомления могут отправляться по нескольким каналам:
Каждый пользователь может настроить получение уведомлений:
Для отправки уведомлений разным группам пользователей:
#if user_group_операторы
#telegram_parse_mode MarkdownV2
*Для операторов*: %var__desc% - %var__alarm_action_name%
#if user_group_инженеры
#telegram_parse_mode MarkdownV2
**Для инженеров**: %var__desc% (%var__node_pseudo_path%) - %var__alarm_action_name%
Значение: %var__value%
Сводная тревога принимает в качестве сигнала все тревоги узла, удовлетворяющие фильтрам. Перечисление переменных не требуется. Сводная тревога активируется при активации хотя бы одной из отслеживаемых тревог и нормализуется только при нормализации всех отслеживаемых тревог.
В качестве фильтров для отбора отслеживаемых тревог из всех тревог узла могут выступать теги и классы тревог.
ВНИМАНИЕ! Сводная тревога не отображается в списке тревог, но может быть использована как переменная на менмосхеме, в скриптах или в выражениях виртуальных переменных.
Использование параметров узла в описаниях тревог:
Описание: "Высокая температура в %location%"
В параметрах узла задаем значение для location (например, "цех №1").
Значение тревожной переменной представляет собой 4-битное число, где каждый бит кодирует определенный признак тревоги:
Биты (двоичное представление): B3 B2 B1 B0
Десятичное значение: 8 4 2 1
B3 (значение 8) — Неквитированность
1 — тревога неквитированная (требует подтверждения оператора)0 — тревога квитированнаяB2 (значение 4) — Активность
1 — тревога активная (условие срабатывания выполняется)0 — тревога неактивнаяB1 и B0 (значения 2 и 1) — Класс тревоги Эти два бита кодируют класс тревоги:
| B1 | B0 | Десятичное | Класс тревоги |
|---|---|---|---|
| 0 | 0 | 0 | Оповещение |
| 0 | 1 | 1 | Предупреждение |
| 1 | 0 | 2 | Неисправность |
| 1 | 1 | 3 | Авария |
1 — неквитированная1 — активная1 — старший бит класса1 — младший бит класса0 — квитированная1 — активная1 — старший бит класса0 — младший бит класса1 — неквитированная0 — неактивная0 — старший бит класса1 — младший бит класса0 — квитированная1 — активная0 — старший бит класса0 — младший бит классаПри использовании в математических выражениях (например, в выражениях виртуальных переменных, в скриптах или в полях контролов на мнемосхемах) доступны специальные функции для работы с тревогами:
// Примеры использования в выражениях
alarm_unack(A) // Возвращает 1 если A неквитированная, иначе 0
alarm_active(A) // Возвращает 1 если A активная, иначе 0
alarm_urgent(A) // Возвращает 1 если A срочная (активная и неквитированная)
alarm_actual(A) // Возвращает 1 если A актуальная (активная или неквитированная)
alarm_class(A) // Возвращает код класса (3,2,1,0)
alarm_max_act(A1,A2,...,An)// Возвращает максимальное значение с приоритетом активности
alarm_max_unack(A1,A2,...,An)// Возвращает максимальное значение с приоритетом неквитированности
// Проверка на активную аварию
if(alarm_class($alarm1) == 3 && alarm_active($alarm1), 1, 0)
// Срочная тревога (активная и неквитированная)
if(alarm_urgent($alarm1), "ТРЕВОГА!", "Норма")
// Агрегация нескольких тревог
alarm_max_act($alarm1, $alarm2, $alarm3)
// Проверка класса тревоги
list(alarm_class($alarm1), 0, "Оповещение", 1, "Предупреждение", 2, "Неисправность", 3, "Авария")
При использовании в шаблонах уведомлений доступны специальные подстановки:
%var__alarm_active% // 1 если тревога активная
%var__alarm_unack% // 1 если тревога неквитированная
%var__alarm_class% // код класса тревоги (3,2,1,0)
%var__alarm_class_name% // имя класса тревоги
%var__alarm_action% // код события тревоги
%var__alarm_action_name% // имя события тревоги
#if channel_telegram
#telegram_parse_mode MarkdownV2
**%var__alarm_class_name%**: %var__desc%
Узел: %var__node_pseudo_path%
Значение: %var__value%
Статус: %var__alarm_action_name%
В виртуальной переменной можно создать агрегированный статус, указав следующее выражение:
// Создаем общий статус из нескольких тревог
alarm_max_act($temp_alarm, $pressure_alarm, $level_alarm)
// Цвет индикатора в зависимости от класса тревоги
{{
if(alarm_class($node1.vars.alarm1) == 3, "red",
if(alarm_class($node1.vars.alarm1) == 2, "orange",
if(alarm_class($node1.vars.alarm1) == 1, "yellow", "green")
)
)
}}
alarm_active(), alarm_class() вместо ручной битовой арифметики